<?php
class archiveAction extends commonAction {
    function __construct() {
        parent::__construct();
        helper("arcfunc");//加载文档管理助手函数
    }
    
    //文档列表页
    function index(){
        helper('thinkpage');//导入分页类
        $ArctinyM=D('Arctiny');//主表模型

        $where=array();
        $count = $ArctinyM->totalcount($where); // 查询满足要求的总记录数
        $Page = new Page($count, 10); // 实例化分页类 传入总记录数和每页显示的记录数
        $arclist = $ArctinyM->getPageArclist($where,$Page->firstRow,$Page->listRows);//当前页文档列表

        $this->assign('pagestr',$Page->show());//分页链接
        $this->assign('arclist',$arclist);//文档列表
        $this->display();
    }
    
    //选择模型
    function choosechannel(){
        $channelM=D('Channel');
        $list=$channelM->field('id,name')->where(array("usable"=>'1'))->select();
        $this->assign('list',$list);
        $this->display();
    }
    
    //发布文档
    function add(){
        $channelM=D('Channel');//实例化频道模型
        $ArctypeM=D('Arctype');//分类模型
        //获取并检测频道id是否存在并合法
        $cid=I('cid',0);
        if(!$cid){
            $this->redirect("choosechannel");
        }
        //获取模型信息，并检测是否存在
        $channelinfo=$channelM->getUsable($cid) or $this->error('模型不存在或不可用');
        if(!$this->isPost()){
            helper('tree');//加载助手
            $typelist=$ArctypeM->GetMoveOptions(0,$cid);//读取指定频道的分类树列表
            $addonform=$channelM->getAddonForm($channelinfo['fieldset']) or $this->error('生成扩展表单失败');//生成频道扩展表单
            $this->assign("typelist",$typelist);
            $this->assign('cid',$cid);
            $this->assign("addonform",$addonform);
            $this->display();
        }else{
            $addonM=new AddonModel($channelinfo['addtable']);//实例化扩展表模型
            $arctinyM=D('Arctiny');//主表模型
            //主表数据自动创建并插入
            if($arctinyM->create()){
                if(!$aid=$arctinyM->add()){//主表数据添加，获得主键ID
                    echo $arctinyM->getDbError();exit;//数据库错误
                }
            }else{
                echo $arctinyM->getError();exit;//创建数据失败，输出错误并退出
            }
            //主表数据
            $ForeignData=array(
                "aid"=>$aid,//文档主表id
            );
            $addondata=$addonM->ParseData($ForeignData);//附加表数据处理
            if($addonM->create($addondata)){
                if(!$addonM->add()){
                    $arctinyM->delete($aid);//删除主表记录
                    echo $addonM->getDbError();exit;
                }
            }else{
                $arctinyM->delete($aid);//删除主表记录
                echo $addonM->getError();exit;
            }
            
            //tags处理
            autotags(I('post.tags'),$aid,I("typeid",0),$cid);
            
            $this->success("文章添加成功",U('index'));
        }
    }
    
    //编辑文档
    function edit(){
        $channelM=D('Channel');//实例化频道模型
        $ArctypeM=D('Arctype');//分类模型
        $ArctinyM=D('Arctiny');//主表模型
        $aid=I('id',0);//文档id
        //读取文档主信息
        $maininfo=$ArctinyM->find($aid);
        if(!$maininfo){
            echo "文档不存在或已被删除";
            exit;
        }
        //获取模型信息，并检测是否存在
        $channelinfo=$channelM->getUsable($maininfo['channelid']) or $this->error('模型不存在或不可用');
        $addonM=new AddonModel($channelinfo['addtable']);//扩展表模型

        if(!$this->isPost()){
            
            //读取分类表单
            helper('tree');
            $typelist=$ArctypeM->GetMoveOptions(0,$maininfo['channelid']);//读取指定频道的分类树列表
            //读取扩展表数据
            $addondata=$addonM->where(array("aid"=>$aid))->find();
            //生成频道扩展表单
            $addonform=$channelM->getAddonForm($channelinfo['fieldset'],$addondata) or $this->error('生成扩展表单失败');
            //读取文档tags
            $taglist=M('Arctag')->alias('a')->field("t.tagname")->join("__TAGS__ as t on t.id=a.tid")->where(array("a.aid"=>$aid))->select();
            $maininfo['tags']="";
            foreach($taglist as $tag){
                $maininfo['tags'].=$maininfo['tags']==""?$tag['tagname']:",".$tag['tagname'];
            }
            $this->assign("addondata",$addondata);//附加表数据
            $this->assign("maininfo",$maininfo);//主表数据
            $this->assign("typelist",$typelist);//分类下拉列表
            $this->assign("addonform",$addonform);//附加表表单
            $this->display();
        }else{
            $arctinyM=&$ArctinyM;//主表模型
            //主表数据更新
            if($arctinyM->create()){
                if(FALSE===$arctinyM->save()){//主表数据添加，获得主键ID
                    echo $arctinyM->getDbError();
                    exit;
                }
            }else{
                echo $arctinyM->getError();
                exit;
            }
            
            //附加表与主表外联字段
            $ForeignData=array(
                "aid"=>$aid,//文档关联id
            );
            //附加表数据更新
            $addondata=$addonM->ParseData($ForeignData);//附加表完整数据生成
            
            if($addonM->create($addondata)){
                if($addonM->save()===false){
                    echo $addonM->getDbError();
                    exit;
                }
            }else{
                echo $addonM->getError();
                exit;
            }
            //tags处理
            autotags(I('post.tags'),$aid,I("typeid",0),$maininfo['channelid']);
            $this->success("文章修改成功",U('index'));
        }
    }
    
    //删除文档
    function delete(){
        $qstr = I("post.ids", ""); //批量删除
        $aid = I("id", ""); //单个文档
        if (!empty($aid) && empty($qstr)) {
            $qstr = $aid;
        }
        if(is_string($qstr)){
            $aids = explode(",", $qstr); //按逗号分隔文档id
        }else{
            $aids = $qstr;
        }
        foreach ($aids as $eachaid) {
            if(!is_numeric($eachaid) || $eachaid<=0){
                $this->error("文档id非法:{$eachaid}");
            }
            if(!delArc($eachaid,$err)){
                echo "删除文档失败，文档id：{$eachaid},{$err} <br />";
                continue;
            }
        }
        $this->success("文档已删除");
    }   
}
